{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "134e7f9d",
   "metadata": {},
   "source": [
    "# Example 2: Deep Formulas\n",
    "\n",
    "The orignal Kolmogorov-Arnold theorem says that it suffices to have 2-Layer function composition (inner and outer functions), but the functions might be non-smooth or even fractal. We generalize KA representation to arbitrary depths. An example a 2-Layer KAN (with smooth activations) is unable to do is: $f(x_1,x_2,x_3,x_4)={\\rm exp}({\\rm sin}(x_1^2+x_2^2)+{\\rm sin}(x_3^2+x_4^2))$, which requires at least 3-Layer KANs."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7854503c",
   "metadata": {},
   "source": [
    "### Three-layer KAN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2075ef56",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 1.26e-02 | test loss: 1.20e-02 | reg: 6.73e+00 : 100%|██| 20/20 [00:32<00:00,  1.63s/it]\n"
     ]
    }
   ],
   "source": [
    "from kan import KAN, create_dataset\n",
    "import torch\n",
    "\n",
    "# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n",
    "model = KAN(width=[4,2,1,1], grid=3, k=3, seed=0)\n",
    "f = lambda x: torch.exp((torch.sin(torch.pi*(x[:,[0]]**2+x[:,[1]]**2))+torch.sin(torch.pi*(x[:,[2]]**2+x[:,[3]]**2)))/2)\n",
    "dataset = create_dataset(f, n_var=4, train_num=3000)\n",
    "\n",
    "# train the model\n",
    "model.train(dataset, opt=\"LBFGS\", steps=20, lamb=0.001, lamb_entropy=2.);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d81e80f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 500x600 with 12 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.plot(beta=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4cd7456f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# it seems that removing edge manually does not change results too much. We include both for completeness.\n",
    "remove_edge = True\n",
    "\n",
    "if remove_edge == True:\n",
    "    model.remove_edge(0,0,1)\n",
    "    model.remove_edge(0,1,1)\n",
    "    model.remove_edge(0,2,0)\n",
    "    model.remove_edge(0,3,0)\n",
    "else:\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ee39c97b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 4.77e-03 | test loss: 4.57e-03 | reg: 7.07e+00 : 100%|██| 50/50 [00:42<00:00,  1.19it/s]\n",
      "train loss: 1.78e-03 | test loss: 1.84e-03 | reg: 7.15e+00 : 100%|██| 50/50 [00:46<00:00,  1.07it/s]\n",
      "train loss: 1.56e-04 | test loss: 1.47e-04 | reg: 7.04e+00 : 100%|██| 50/50 [01:10<00:00,  1.41s/it]\n",
      "train loss: 1.13e-05 | test loss: 1.05e-05 | reg: 7.05e+00 : 100%|██| 50/50 [01:27<00:00,  1.74s/it]\n",
      "train loss: 6.00e-07 | test loss: 5.07e-07 | reg: 7.05e+00 : 100%|██| 50/50 [01:50<00:00,  2.21s/it]\n"
     ]
    }
   ],
   "source": [
    "grids = [3,5,10,20,50]\n",
    "#grids = [5]\n",
    "\n",
    "train_rmse = []\n",
    "test_rmse = []\n",
    "\n",
    "for i in range(len(grids)):\n",
    "    model = KAN(width=[4,2,1,1], grid=grids[i], k=3, seed=0).initialize_from_another_model(model, dataset['train_input'])\n",
    "    results = model.train(dataset, opt=\"LBFGS\", steps=50, stop_grid_update_step=30);\n",
    "    train_rmse.append(results['train_loss'][-1].item())\n",
    "    test_rmse.append(results['test_loss'][-1].item())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "94f3930a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.004774762578012783, 0.0017847731212278354, 0.00015569770964015761, 1.1261090479694874e-05, 5.997260680598509e-07]\n",
      "[0.004566344580739028, 0.0018364543204432066, 0.00014685209697567987, 1.0454170453671914e-05, 5.074556425958742e-07]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGhCAYAAACphlRxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABtbElEQVR4nO3dd1zV9R7H8dc5Bw57iAOl3CNFVIa4NSeKhpmao9xlaWa5Sy1TszQzR4krNUdlauYot5mi4kRx4UwNTRQR2fuc3/2D5EYu0HM4nMPn+XjwuPf8+PH7fg7eC2++U6UoioIQQgghhJlQm7oAIYQQQoj8kPAihBBCCLMi4UUIIYQQZkXCixBCCCHMioQXIYQQQpgVCS9CCCGEMCsSXoQQQghhVqxMXYCh6fV6bt68iZOTEyqVytTlCCGEECIPFEUhMTERDw8P1OrH961YXHi5efMmZcuWNXUZQgghhHgK169f5/nnn3/sPRYXXpycnIDsN+/s7GziaoQQQgiRFwkJCZQtWzbn9/jjWFx4uT9U5OzsLOFFCCGEMDN5mfIhE3aFEEIIYVYkvAghhBDCrEh4EUIIIYRZkfAihBBCCLNS6MLL9evXad68OZ6entSuXZu1a9eauiQhhBBCFCKFbrWRlZUVs2fPxtvbm+joaHx9fWnfvj0ODg6mLk0IIYQQhUChCy9lypShTJkyAJQqVQo3NzdiY2MlvAghhBACeIpho5CQEIKCgvDw8EClUrFhw4YH7pk3bx4VK1bE1tYWPz8/9u3b91TFHTt2DL1eLzvmCiGEECJHvntekpOTqVOnDv3796dLly4PfH716tUMGzaMefPm0bhxYxYuXEhgYCARERGUK1cOAD8/P9LT0x/42h07duDh4QHA3bt36dOnD4sXL35sPenp6bmelZCQkN+3JIQQQggzolIURXnqL1apWL9+PZ06dcq5Vr9+fXx9fZk/f37OtRo1atCpUyemTp2ap+emp6fTpk0bBg4cSO/evR9778SJE5k0adID1+Pj42WHXSGEEMJMJCQk4OLikqff3wZdbZSRkUFYWBgBAQG5rgcEBBAaGpqnZyiKQr9+/WjZsuUTgwvA2LFjiY+Pz/m4fv36U9UuhBBCCPNg0Am7MTEx6HQ63N3dc113d3fn1q1beXrGgQMHWL16NbVr186ZT7Ny5Upq1ar10PttbGywsbF5prqFEEIIYT6Mstrov4cqKYqSp4OWAJo0aYJer893m8HBwQQHB6PT6fL9tUIIIYQwHwYdNipRogQajeaBXpbo6OgHemMMbciQIURERHD06FGjtREXF0e7du04deqU0doQQgghxOMZNLxotVr8/PzYuXNnrus7d+6kUaNGhmzKJMaOHcv27dupV68eCxcu5BnmOgshhBDiKeU7vCQlJREeHk54eDgAV69eJTw8nMjISABGjBjB4sWLWbp0KefOnWP48OFERkYyaNAggxb+X8HBwXh6euLv72+0Nj799FPat29Peno6gwYNomfPnrI0WwghhChg+V4qvWfPHlq0aPHA9b59+7Js2TIge5O66dOnExUVhZeXF7NmzaJZs2YGKfhJ8rPU6mno9XpmzpzJ2LFjycrKonLlyqxZswZfX1+DtyWEEEIUFfn5/f1M+7wURsYOL/cdPHiQHj16EBkZiVarZd26dbz00ktGa08IIYSwZCbb56UoadiwISdOnKBjx46UKlWKhg0bmrokIYQQokiwmPBSEHNe/svNzY0NGzZw6NAhihcvDmQvC//zzz8LrAYhhBCiqLGY8FIQS6UfRqVS8dxzz+W8XrZsGTVq1GDWrFmyGkkIIYQwAosJL4XFnj17yMzMZMSIEXTq1InY2FhTlySEEEJYFAkvBrZs2TKCg4PRarVs2rQJb29vDh48aOqyhBBCCIsh4cXAVCoV77zzDocOHaJKlSpcv36dpk2bMn369Kc69kAIIYQQuVlMeDHFhN3H8fHxISwsjB49eqDT6fjwww85fvy4qcsSQgghzJ7s82JkiqKwePFibt++zUcffWTqcoQQQohCKT+/v41yqrQl0ukVjlyNJToxjVJOttSr6IZG/eSTslUqFQMHDsx17fLly6xbt47Ro0ejVltM55cQQghRICS85MG2M1F8uuk0ZZNOUoo4onHlumMdPu5Yi3ZeZfL1rMzMTLp3787x48f5/fffWblypdFP3BZCCCEsifzZ/wTbzkSx4ccFrE1/m5+0U/haO5eftFNYm/42G35cwLYzUfl6nrW1NUOHDsXe3p6dO3fi7e3N7t27jVS9EEIIYXksJrwYY8KuTq+wZ8NS5lnPpjS592spTSzzrGezZ8NSdPr8TRvq168fR48epWbNmty6dYvWrVszceJEdDqdwWoXQgghLJVM2H2Mg5eiKf99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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "n_params = np.array(grids) * (4*2+2*1+1*1)\n",
    "plt.plot(n_params, train_rmse, marker=\"o\")\n",
    "plt.plot(n_params, test_rmse, marker=\"o\")\n",
    "plt.plot(n_params, 10000*n_params**(-4.), color=\"black\", ls=\"--\")\n",
    "plt.legend(['train', 'test', r'$N^{-4}$'], loc=\"lower left\")\n",
    "plt.xscale('log')\n",
    "plt.yscale('log')\n",
    "print(train_rmse)\n",
    "print(test_rmse)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f53644fe",
   "metadata": {},
   "source": [
    "### Two-layer KAN\n",
    "\n",
    "Now we show that a 2 two-layer KAN performs much worse for this task"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "58c4ae70",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 7.41e-02 | test loss: 7.32e-02 | reg: 1.36e+01 : 100%|██| 20/20 [00:34<00:00,  1.74s/it]\n"
     ]
    }
   ],
   "source": [
    "from kan import KAN, create_dataset\n",
    "import torch\n",
    "\n",
    "# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n",
    "model = KAN(width=[4,9,1], grid=3, k=3, seed=0)\n",
    "f = lambda x: torch.exp((torch.sin(torch.pi*(x[:,[0]]**2+x[:,[1]]**2))+torch.sin(torch.pi*(x[:,[2]]**2+x[:,[3]]**2)))/2)\n",
    "dataset = create_dataset(f, n_var=4, train_num=3000)\n",
    "\n",
    "# train the model\n",
    "model.train(dataset, opt=\"LBFGS\", steps=20, lamb=0.001, lamb_entropy=2.);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "869828f2",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 2.75e-02 | test loss: 2.97e-02 | reg: 1.81e+01 : 100%|██| 50/50 [01:24<00:00,  1.69s/it]\n",
      "train loss: 1.76e-02 | test loss: 2.01e-02 | reg: 1.76e+01 : 100%|██| 50/50 [01:38<00:00,  1.97s/it]\n",
      "train loss: 3.79e-03 | test loss: 4.85e-03 | reg: 1.78e+01 : 100%|██| 50/50 [01:48<00:00,  2.16s/it]\n",
      "train loss: 1.77e-03 | test loss: 2.95e-03 | reg: 1.77e+01 : 100%|██| 50/50 [02:07<00:00,  2.55s/it]\n",
      "train loss: 7.62e-03 | test loss: 1.18e-02 | reg: 1.74e+01 : 100%|██| 50/50 [03:06<00:00,  3.73s/it]\n"
     ]
    }
   ],
   "source": [
    "grids = [3,5,10,20,50]\n",
    "#grids = [5]\n",
    "\n",
    "train_rmse = []\n",
    "test_rmse = []\n",
    "\n",
    "for i in range(len(grids)):\n",
    "    model = KAN(width=[4,9,1], grid=grids[i], k=3, seed=0).initialize_from_another_model(model, dataset['train_input'])\n",
    "    results = model.train(dataset, opt=\"LBFGS\", steps=50, stop_grid_update_step=30);\n",
    "    train_rmse.append(results['train_loss'][-1].item())\n",
    "    test_rmse.append(results['test_loss'][-1].item())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4f0a99fd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.027514415570597788, 0.0175788804953916, 0.0037939843087960545, 0.001766220055347071, 0.007622899974849284]\n",
      "[0.029668332328004216, 0.020098020933420547, 0.00485182714170569, 0.00294601553725477, 0.01183480890790476]\n"
     ]
    },
    {
     "data": {
      "image/png": "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pEl4e3uzbNkyatWqxTfffGN2aSJyjXwTXtQqLSJ3y8XFhUGDBrFt2zaaN29OfHw8kZGRZpclItdQq7SIyA1YrVa+++47nnzySdzd3QE4d+4cRYsWxWKxmFydSP6jVmkRkbvk6upKnz590oJLcnIybdq0oUuXLkRFRZlcnYhzU3gREcmEDRs2sHv3bv78809q1qzJjz/+SD4buBZxGAovIiKZ0KJFC8LCwggODub8+fM8+eST9OjRg+joaLNLE3E6Ci8iIpkUFBTE+vXrGT16NG5ubvz+++/UrFmT2bNnm12aiFNReBERyQJ3d3dGjRrFpk2bqF27NmfOnGHChAla1E4kF7mZXYCIiCOqW7cumzZt4v3336dXr164uBifBW02W9p/i0jOUKu0iEg2Gjx4MOfPn+ezzz6jaNGiZpcj4jCcslVai9SJiNmOHDlCaGgo3377LUFBQSxYsMDskkTyJY28iIhko3Xr1tG7d2/2798PQL9+/Rg/frx+H4nchlOOvIiI5AVNmjQhPDycwYMHY7FY+Oabb6hVqxb//POP2aWJ5BsKLyIi2czb25tPP/2U5cuXU6lSJY4ePUrPnj2Ji4szuzSRfEHdRiIiOeS+++5j+/btDB8+nEaNGunSkUg20ZwXEZFc9tdff7F48WI++OADChQoYHY5InmC5ryIiORRly5don///nz22WfUrVuX9evXm12SiMNReBERyUUFChRg6tSplClThn379tGsWTOGDx9OYmKi2aWJOAyFFxGRXNapUyciIiJ4+umnsdlsjB07lpCQEDZv3mx2aSIOQeFFRMQERYsWZebMmcydOxd/f3927dpF48aN2bt3r9mlieR5+abbKDQ0lNDQUKxWq9mliIhk2sMPP0yzZs146aWXcHNzo1q1amaXJJLnqdtIRCSPSElJwd3dHYCTJ08yY8YMXn311bRjIvmZuo1ERBzQlZBit9t5/vnneeONN2jSpAk7d+40uTKRvEXhRUQkD3rssccoWrQoYWFhBAcH89FHH+myuMhlCi8iInmMxWLhiSeeYOfOnTz00EMkJyczYsQImjdvrgm9Iii8iIjkWaVLl2b+/PlMnz4dHx8f1q9fT926dbXJozg9hRcRkTzMYrHQp08fIiIiaN++PaVLl6ZRo0ZmlyViKoUXEREHUK5cORYuXMjq1aspVKgQADabjTlz5mCz2UyuTiR3KbyIiDgIi8VCmTJl0m5PnjyZnj170q5dO44cOWJiZSK5S+FFRMRBeXh44O3tzdKlS6lVqxZTp04lny3dJXJDCi8iIg7queeeY9u2bTRr1owLFy7Qv39/HnjgASIjI80uTSRHKbyIiDiwe++9lxUrVjBu3Dg8PT1ZuHAhQUFBzJ8/3+zSRHJMvgkvoaGhBAYG0qBBA7NLERHJVa6urrz66quEh4fTsGFD4uPjKVu2rNllieQY7W0kIpKPpKamsnbtWu677760Y3v27KFatWpYLBYTKxO5Ne1tJCLipNzc3DIElx07dlC7dm0eeeQRoqOjTaxMJPsovIiI5GObNm3CbrczZ84cgoKCmDNnjtklidw1hRcRkXysb9++bNq0iVq1anH69Gl69uzJE088wdmzZ80uTeSOKbyIiORzdevWZfPmzYwcORJXV1d++ukngoKC+PPPP80uTeSOKLyIiDgBDw8P3nvvPdatW0eNGjU4efIke/bsMbsskTviZnYBIiKSexo0aMCWLVv4+uuveeGFF9KOx8fHp+2ZJJLXaeRFRMTJeHl58dJLL+Hq6grApUuXaNCgAc899xwXLlwwuTqR21N4ERFxcosWLWLPnj18/fXX1KpVi6VLl5pdksgtKbyIiDi5rl27smzZMipWrMiRI0do27YtL774IhcvXjS7NJEbUngRERFatWrFjh07GDBgAGBsuVKnTh1Wr15tcmUi11N4ERERAAoVKsSUKVP4+++/KVeuHAcPHuT99983uyyR6yi8iIhIBu3atWPHjh288MILfPXVV2nH89lWeOLAtDGjiIhkyoABAyhatChvv/02np6eZpcj+YxTbswYGhpKYGAgDRo0MLsUEZF8Z9u2bXz55Zd8+OGHhISEEBYWZnZJ4sQ08iIiIpkyd+5cnn/+eaKjo3F1dWXkyJGMHDkSDw8Ps0uTfMApR15ERCRnde3alZ07d/Loo49itVp55513aNSoEdu3bze7NHEyCi8iIpJpJUqU4JdffuGXX36hePHihIeH88ADD5CcnGx2aeJEFF5ERCTLHn30UXbu3EnXrl2ZMGGCLh1JrtLGjCIickf8/f357bffsFgsacfmzJnDwYMHefXVV9P2ThLJbhp5ERGRO3Z1cDl79izPP/88w4cPp0WLFuzbt8/EyiQ/U3gREZFsUaxYMcaOHUvhwoVZt24dderU4bPPPsNms5ldmuQzCi8iIpItLBYLffv2JSIigvvvv5/ExESGDBlCq1atOHjwoNnlST6i8CIiItmqfPny/P3330yePJmCBQuyatUq6tSpQ1RUlNmlST6h8CIiItnOYrEwcOBAtm/fTsuWLXnqqacoXbq02WVJPqFuIxERyTH33HMPS5cuzbAOzJEjR/jnn3945plnMkz4FcksjbyIiEiOcnFxwcvLCzB2pu7Xrx/9+vXjwQcf5Pjx4yZXJ45I4UVERHKN3W6nY8eOeHp6smDBAoKCgvjuu+/IZ9vsSQ5TeBERkVzj4uLCsGHD2LJlCw0aNCAmJoann36abt26cfLkSbPLEweh8CIiIrkuMDCQtWvX8v777+Pu7s68efOoWbMmW7duNbs0cQAKLyIiYgo3NzfefPNNwsLCqFevHv7+/tSoUcPsssQBKLyIiIipatWqxYYNG1i4cGHaxN7U1FSWLFlicmWSVym8iIiI6dzd3Slfvnza7XHjxtGuXTueeuopzp07Z2JlkhcpvIiISJ6TlJSEi4sLP/zwA0FBQfzvf/8zuyTJQxReREQkz3nrrbdYu3Yt1apVIyoqioceeoi+ffsSGxtrdmmSByi8iIhIntSoUSO2bt3Kq6++isViYfr06QQFBbFmzRqzSxOT5ZvwEhoaSmBgIA0aNDC7FBERySYFChRg3LhxrFy5ksqVKxMdHU2RIkXMLktMZrHns2UN4+Li8PX1JTY2Fh8fH7PLERGRbHLx4kXWrVvH/fffn3bsyJEjVKhQwcSqJLtk5f0734y8iIhI/lawYMEMwWXTpk3ce++9vPTSS1y8eNHEyiS3Oe2u0larlZSUFLPLcEju7u64urqaXYaIOLklS5aQmprKpEmTWLhwIdOnT6d58+ZmlyW5wOkuG9ntdk6ePElMTEzuF5ePFClShFKlSmk7exEx1d9//02/fv2IjIzEYrEwZMgQ3nvvPQoUKGB2aZJFWbls5HThJSoqipiYGPz8/PD29tabbxbZ7XYSEhLSJs2VLl3a7JJExMnFxsYyZMgQpk+fDkC1atWYOXMmjRo1MrkyyYqshBenumxktVrTgkvx4sXNLsdhXflEEx0djZ+fny4hiYipfH19mTZtGt27d6d///7s3buXrVu3KrzkY04VXq7McfH29ja5Esd35WeYkpKi8CIiecJDDz3Ezp07+eqrr3j++efTjiclJeHp6WliZZLdnLLbSJeK7p5+hiKSFxUrVowRI0ak/Y66cOECtWrV4u233yY5Odnk6iS7OGV4ERER5/DTTz+xf/9+Ro8eTaNGjdixY4fZJUk2UHgREZF867nnnuPnn3+mWLFihIeHExISwgcffEBqaqrZpcldUHi5Q1abnXUHzzIv/DjrDp7FanOcpq2KFSvy2WefmV2GiEiueOyxx9i5cyddunQhJSWFkSNH0rRpU3bv3m12aXKHnGrCbnZZGBHF6D92ERWbmHastK8Xb3UOpGNQzrQOt2rVirp162ZL6Ni0aRMFCxa8+6JERBxEqVKlmDt3Lt9//z0vv/wymzZtYvTo0fz8889mlyZ3QCMvWbQwIoqB32/JEFwATsYmMvD7LSyMiDKlLrvdnulh0JIlS6rjSkScjsVioVevXkRERPDEE0/w+eefm12S3CGnDy92u52E5NRMfV1ITOGt+Tu50QWiK8fenr+LC4kpmXq+zK4P2KdPH1asWMGECROwWCxYLBZmzJiBxWJh0aJF1K9fH09PT1atWsXBgwd5+OGH8ff3p1ChQjRo0IAlS5ZkeL5rLxtZLBamTp1Kt27d8Pb2pkqVKsyfP//OfqAiInlc2bJl+eGHH/Dz80s71q9fPyZMmIDNZjOxMsksp79sdCnFSuCoRdnyXHbgZFwitd7+O1Pn73qnA94et/8rmDBhAvv27SMoKIh33nkHgJ07dwLw+uuvM27cOO655x6KFClCZGQkDzzwAO+99x5eXl7MnDmTzp07s3fvXsqXL3/T1xg9ejRjx47l448/ZuLEiTz55JMcOXKEYsWKZep7ERFxVEuXLmXatGkA/P7770ybNo177rnH5KrkVpx+5MUR+Pr64uHhgbe3N6VKlaJUqVJpC8O98847tGvXjsqVK1O8eHHq1KnD888/T61atahSpQrvvfce99xzz21HUvr06cPjjz/OvffeywcffMDFixfZuHFjbnx7IiKmatWqFaGhoXh7e7NixQpq167NF198kenRccl9Tj/yUsDdlV3vdMjUuRsPnaPP9E23PW/GMw1oWOn2IxYF3O9+Zdr69etnuH3x4kVGjx7Nn3/+yYkTJ0hNTeXSpUscPXr0ls9Tu3bttP8uWLAghQsXJjo6+q7rExHJ61xcXHjhhRfo2LEjzzzzDCtXrmTgwIHMmTOHb7755paj1mIOpx95sVgseHu4ZeqrRZWSlPb14mZry1owuo5aVCmZqefLjlVqr+0aeu2115gzZw7vv/8+q1atIjw8nFq1at12ZUl3d/eM34vFomu/IuJU7rnnHpYtW8ann36Kl5cXS5YsoVOnTvpdmAc5fXjJClcXC291DgS4LsBcuf1W50BcXbJ/6XwPDw+sVuttz1u1ahV9+vShW7du1KpVi1KlSnH48OFsr0dEJD9ycXFh8ODBbNu2jSZNmvDJJ5/g4qK3yrxGfyNZ1DGoNFOeCqaUr1eG46V8vZjyVHCOrfNSsWJFNmzYwOHDhzlz5sxNPwnce++9/Pbbb4SHh7Nt2zaeeOIJfWoQEcmiqlWrsmbNGjp27Jh27KeffuL777/XXJg8wOnnvNyJjkGlaRdYio2HzhF9IRG/wl40rFQsR0Zcrhg2bBi9e/cmMDCQS5cuMX369Bue9+mnn9K3b1+aNm1KiRIlGD58OHFxcTlWl4hIfnX1pf3jx48zYMAA4uLimDNnDl988QX+/v4mVufcLPZ8FiHj4uLw9fUlNjYWHx+fDPclJiZy6NAhKlWqhJeX102eQTJDP0sRcSapqal89NFHjB49mpSUFIoXL87kyZN59NFHzS4t37jV+/e1dNlIRETkNtzc3Bg5ciSbNm2iTp06nD17lscee4zHHnuMM2fOmF2e01F4ERERyaQ6deqwceNGRo0ahaurK7NmzaJ27dq6PJ/LFF5ERESywMPDg9GjR7NhwwZq1qzJ448/ftvLHJK9NGFXRETkDoSEhBAWFpah+2jfvn0cOHCABx54wMTK8j+NvIiIiNwhT0/PtKYFq9VKnz59ePDBB+nXrx+xsbEmV5d/KbyIiIhkg9TUVJo0aYLFYmHatGnUqlWLJUuWmF1WvqTwIiIikg08PT355JNPWLFiBZUrV+bYsWO0a9eOgQMHEh8fb3Z5+YrCi4iISDZq0aIF27Zt48UXXwTgiy++oFatWhw8eNDkyvIPhRcREZFsVrBgQSZOnMg///xDhQoVKFasmHanzkZ5NrwkJCRQoUIFhg0bZnYpN2azwqFVsGO28aft9psmioiIc2nTpg07duxgzpw5uLu7A5CcnMymTZtMrsyx5dnw8v7779OoUSOzy7ixXfPhsyCY+RDM6Wf8+VmQcTyHtGrVisGDB2fb8/Xp04euXbtm2/OJiMiNFS5cmIoVK6bdfvfdd2nUqBGvvfYaiYmJ5hXmwPJkeNm/fz979uzJm33yu+bDrKch7kTG43FRxvEcDDAiIuLY7HY7UVFR2O12xo0bR7169di4caPZZTmcLIeXlStX0rlzZ8qUKYPFYmHu3LnXnTN58uS0DftCQkJYtWpVll5j2LBhjBkzJqul3Rm7HZIvZu4rMQ4WvA7caC/Ly8cWDjfOy8zzZXJPzD59+rBixQomTJiAxWLBYrFw+PBhdu3axQMPPEChQoXw9/enV69eGfbYmD17NrVq1aJAgQIUL16c+++/n4sXL/L2228zc+ZM5s2bl/Z8y5cvv+sfpYiI3JrFYmHq1KnMmzePUqVKsWfPHpo2bcrIkSNJSkoyuzyHkeUVdi9evEidOnV45pln6NGjx3X3//LLLwwePJjJkyfTrFkzvvzySzp16sSuXbvSJiuFhITc8C/p77//ZtOmTVStWpWqVauydu3aO/iWsiglAT4ok01PZjdGZD4sl7nT3zwBHgVve9qECRPYt28fQUFBvPPOO4CxGFLLli3p378/48eP59KlSwwfPpxHH32UpUuXEhUVxeOPP87YsWPp1q0bFy5cYNWqVdjtdoYNG8bu3buJi4tj+vTpABQrVuyOv2sREcmaLl260KxZM1566SV++uknPvjgA/744w9++uknatasaXZ5eV6Ww0unTp3o1KnTTe8fP348/fr149lnnwXgs88+Y9GiRUyZMiVtNCUsLOymj1+/fj0///wzv/76K/Hx8aSkpODj48OoUaNueH5SUlKGIJQfN8fy9fXFw8MDb29vSpUqBcCoUaMIDg7mgw8+SDtv2rRplCtXjn379hEfH09qairdu3enQoUKANSqVSvt3AIFCpCUlJT2fCIikruKFy/Ojz/+SI8ePRgwYAAHDx5MW61Xbi1b9zZKTk4mLCyMESNGZDjevn37TI+ijBkzJi3kzJgxg4iIiJsGlyvnjx49+s6Ldvc2RkAy48ha+KHn7c97cjZUaJq5175DYWFhLFu2jEKFCl1338GDB2nfvj1t27alVq1adOjQgfbt29OzZ0+KFi16x68pIiLZr0ePHrRo0YItW7ZQuXLltOOnTp3C39/fxMryrmydsHvmzBmsVut1P2x/f39OnjyZnS+V5o033iA2Njbt69ixY1l7AovFuHSTma/KbcCnDGC52ZOBT1njvMw8n+Vmz3N7NpuNzp07Ex4enuFr//793Hfffbi6urJ48WIWLFhAYGAgEydOpFq1ahw6dOiOX1NERHKGn58fHTt2TLu9YsUKKlSowJgxY0hNTTWxsrwpR7qNLNe8Kdvt9uuOZUafPn0YN27cLc/x9PTEx8cnw1eOcXGFjh9dvnHt93P5dscPjfOymYeHB1Zr+loywcHB7Ny5k4oVK3Lvvfdm+CpY0JhHY7FYaNasGaNHj2br1q14eHjw+++/3/D5REQk7/j1119JSkrizTffpFmzZuzZs8fskvKUbA0vJUqUwNXV9bpRlujo6Pwz9BXYBR79FnxKZzzuU8Y4HtglR162YsWKbNiwgcOHD3PmzBkGDRrEuXPnePzxx9m4cSP//vsvf//9N3379sVqtbJhwwY++OADNm/ezNGjR/ntt984ffo0NWrUSHu+7du3s3fvXs6cOUNKSkqO1C0iIlk3ceJEZs6cia+vLxs3bqRu3bp88skn+tB5WbaGFw8PD0JCQli8eHGG44sXL6Zp00zMAXEUgV1gcAT0/hN6fGP8OXhHjgUXMNrHXV1dCQwMpGTJkiQnJ7NmzRqsVisdOnQgKCiIV155BV9fX1xcXPDx8WHlypU88MADVK1alf/85z988sknaZOt+/fvT7Vq1ahfvz4lS5ZkzZo1OVa7iIhkjcVi4emnnyYiIoIOHTqQlJTEsGHDaNmyJQcOHDC7PNNlecJufHx8hh/coUOHCA8PT9u3YejQofTq1Yv69evTpEkTvvrqK44ePcqAAQOytfBrhYaGEhoamnup1MUVKrXIndcCqlatyrp16647/ttvv93w/Bo1arBw4cKbPl/JkiX5+++/s60+ERHJfgEBASxYsICpU6cydOhQ1qxZw9q1a7n33nvNLs1UFrs9kyulXbZ8+XJat2593fHevXszY8YMwFikbuzYsURFRREUFMSnn37Kfffdly0F305cXBy+vr7ExsZeN/8lMTGRQ4cOpS2gJ3dOP0sRkdx15MgRZs6cyX//+9+0eaSpqam4uWVr47BpbvX+fa0sh5e8TuEld+hnKSJirnPnztGkSRNeffVV+vfvf0eNMXlJVsJLntzbSERERG5t8uTJ7Nu3j+eff56OHTtmfakQB6bwIiIi4oDefPNNxo8fj5eXF3///TdBQUHMmDGDfHZB5YYUXkRERByQi4sLQ4YMITw8nEaNGhEXF8czzzxDly5dOHEikyvHOyiFFxEREQdWrVo1Vq9ezYcffoiHhwd//vln2ia++VW+CS+hoaEEBgbSoEEDs0sRERHJVW5ubgwfPpywsDAeeuihtD0C86t8E14GDRrErl272LRpk9mliIiImCIoKIg//vgjbRNeu91O3759+fXXX02uLHvlm/AiIiIiGf32229Mnz6dRx99lP/7v//j7NmzZpeULRReRERE8qnOnTvz3//+F1dXV3755Rdq1qzJvHnzzC7rrim8OLGEhAQqVKjAsGHDzC5FRERygIeHB++88w7r168nMDCQU6dO0bVrV55++mnOnz9vdnl3TOHFib3//vs0atTI7DJERCSH1a9fn7CwMIYPH46LiwvfffcdDz/8sNll3TGFFye1f/9+9uzZwwMPPGB2KSIikgu8vLz48MMPWb16NdWrV+e9994zu6Q7lm/Ci7O0St93331YLBZ++umnDMcnT56Mn59fpp9n2LBh+b6VTkRErtekSRMiIiIybJj87bffsmTJEhOrypp8E16coVXabrcTHh5O6dKlmTNnTob7tmzZQnBwcNrtkJAQgoKCrvs6ceIE8+bNo2rVqlStWjW3vwUREckDXF1d0/77wIEDDBgwgHbt2vHCCy8QHx9vYmWZkz/20XYS+/fv58KFC3z44Ye89tprJCQk4O3tDUBYWFiGS0BhYWE3fZ7169fz888/8+uvvxIfH09KSgo+Pj6MGjUqx78HERHJW0qVKsUzzzzD5MmTmTJlCosWLWL69OkZRmbymnwz8nK3Ll68eNOvxMTETJ976dKlTJ17J8LCwvDy8uLZZ5/Fx8eHBQsWAJCUlMTOnTszjLzcypgxYzh27BiHDx9m3Lhx9O/fX8FFRMRJFSpUiNDQUJYsWUL58uX5999/adWqFYMHDyYhIcHs8m5I4eWyQoUK3fSrR48eGc718/O76bmdOnXKcG7FihVveN6d2LJlC7Vr18bDw4Nu3boxe/ZsALZv305KSgohISF39s2LiIjTa9u2LTt27ODZZ5/FbrczYcIEGjRoQHJystmlXUeXjRxIWFhY2uhK9+7d6d69O0lJSYSFhVGsWDEqVqyY5efs06dP9hYpIiIOy8fHh6+//pru3bvz7LPP0rNnTzw8PMwu6zoKL5fdaoLS1RObAKKjo296rotLxsGsw4cP31VdV9u6dStPPPEEAK1atcLDw4NFixaxZcsW6tWrl22vIyIizq1Tp05ERERQsGDBtGM7d+4kISEhT3T1KrxcdvVfkFnn3sq///5LTExM2siLm5sbnTt3Zs6cOURERHD//fdny+uIiIgAaZs7AiQnJ/PUU0+xY8cORowYwahRo0wdkck3c17y+zovYWFheHh4EBQUlHasR48ezJ8/n4iIiExP1hUREcmqxMREqlevjtVqZfr06aZP5M03Iy+DBg1i0KBBxMXF4evra3Y52W7Lli0EBQVlSLrt2rXDarWSnJys8CIiIjnGx8eHn376iR49euDr60uRIkVMrcdit9vtplaQza6El9jYWHx8fDLcl5iYyKFDh6hUqRJeXl4mVZg/6GcpIiLZ6Vbv39fKN5eNRERExDkovIiIiIhDUXgRERERh6LwIiIiIg5F4UVEREQcilOGl3zWYGUK/QxFRMQsThVe3N3dAUxfXCc/uPIzvPIzFRERyS35ZpG60NBQQkNDsVqtNz3H1dWVIkWKpO1N5O3tjcViya0S8wW73U5CQgLR0dEUKVLkun2fREREcppTLVIHxpvvyZMniYmJyf3i8pEiRYpQqlQphT8REckWWVmkLt+MvGSWxWKhdOnS+Pn5kZKSYnY5Dsnd3V0jLiIiYhqnCy9XuLq66g1YRETEATnVhF0RERFxfAovIiIi4lAUXkRERMSh5Ls5L1eap+Li4kyuRERERDLryvt2Zpqg8114uXDhAgDlypUzuRIRERHJqgsXLuDr63vLc/LdOi82m40TJ05QuHBhrUGSzRo0aMCmTZvMLsNUjvozyGt1m1FPbrxmTrxGdj7n3T5XXFwc5cqV49ixY7ddh0Pynrz2e+BadrudCxcuUKZMGVxcbj2rJd+NvLi4uBAQEGB2GfmSq6ur0//CctSfQV6r24x6cuM1c+I1svM5s+u5fHx88tT/T5I5ee33wI3cbsTlCk3YlUwbNGiQ2SWYzlF/BnmtbjPqyY3XzInXyM7nzGv/H0juyk9///nuspGIiOSMrCzfLpKTNPIiIiKZ4unpyVtvvYWnp6fZpYiT08iLiIiIOBSNvIiIiIhDUXgRERERh6LwIiIiIg5F4UVEREQcisKLiIiIOBSFFxERuSsXLlygQYMG1K1bl1q1avH111+bXZLkc2qVFhGRu2K1WklKSsLb25uEhASCgoLYtGkTxYsXN7s0yac08iIiInfF1dUVb29vABITE7FarehzseQkhRcRESe3cuVKOnfuTJkyZbBYLMydO/e6cyZPnkylSpXw8vIiJCSEVatWZbg/JiaGOnXqEBAQwOuvv06JEiVyqXpxRgovIiJO7uLFi9SpU4dJkybd8P5ffvmFwYMHM3LkSLZu3UqLFi3o1KkTR48eTTunSJEibNu2jUOHDvHjjz9y6tSp3CpfnJDmvIiISBqLxcLvv/9O165d0441atSI4OBgpkyZknasRo0adO3alTFjxlz3HAMHDqRNmzY88sgjuVGyOCGNvIiIyE0lJycTFhZG+/btMxxv3749a9euBeDUqVPExcUBxs7TK1eupFq1arleqzgPN7MLEBGRvOvMmTNYrVb8/f0zHPf39+fkyZMAREZG0q9fP+x2O3a7nRdffJHatWubUa44CYUXERG5LYvFkuG23W5POxYSEkJ4eLgJVYmz0mUjERG5qRIlSuDq6po2ynJFdHT0daMxIrlF4UVERG7Kw8ODkJAQFi9enOH44sWLadq0qUlVibPTZSMREScXHx/PgQMH0m4fOnSI8PBwihUrRvny5Rk6dCi9evWifv36NGnShK+++oqjR48yYMAAE6sWZ6ZWaRERJ7d8+XJat2593fHevXszY8YMwFikbuzYsURFRREUFMSnn37Kfffdl8uVihgUXkRERMShaM6LiIiIOBSFFxEREXEoCi8iIiLiUBReRERExKEovIiIiIhDUXgRERERh6LwIiIiIg5F4UVEREQcisKLiIiIOBSFFxEREXEoCi8iIiLiUBReRERExKH8P3Q1cZ6CKdbgAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "n_params = np.array(grids) * (4*9+9*1)\n",
    "plt.plot(n_params, train_rmse, marker=\"o\")\n",
    "plt.plot(n_params, test_rmse, marker=\"o\")\n",
    "plt.plot(n_params, 300*n_params**(-2.), color=\"black\", ls=\"--\")\n",
    "plt.legend(['train', 'test', r'$N^{-4}$'], loc=\"lower left\")\n",
    "plt.xscale('log')\n",
    "plt.yscale('log')\n",
    "print(train_rmse)\n",
    "print(test_rmse)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5776b6e1",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
